<template>
    <div class="login">
        <section class="form_container">
            <div class="manager_tip">
                <span class="title">Test</span>
                <el-form :model="loginUser" :rules="rules" ref="loginForm" label-width="auto" class="loginForm">
                    <el-form-item label="用户名" prop="name">
                        <el-input v-model="loginUser.name" placeholder="请输入用户名"></el-input>
                    </el-form-item>
                    <el-form-item label="密码" prop="password">
                        <el-input type="password" v-model="loginUser.password" placeholder="请输入密码"></el-input>
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" class="submit_btn" @click="submitForm('loginForm')">登录</el-button>
                    </el-form-item>
                    <div class="tiparea">
                        <p>还没有账号？现在<router-link to="/register">注册</router-link></p>
                    </div>
                </el-form>
            </div>
        </section>
    </div>
</template>

<script>
import jwt_decode from 'jwt-decode'
export default {
    name: 'login',
    components: {},
    data() {
        return {
            loginUser: {
                email: '',
                password: '',
            },
            rules: {
                name: [
                    {
                        required: true,
                        message: '用户名不能为空！',
                        trigger: 'blur'
                    },
                ],
                password: [
                    {
                        required: true,
                        message: '密码不能为空！',
                        trigger: 'blur'
                    },
                ]
            }
        }
    },
    methods: {
        submitForm(formName) {
            this.$refs[formName].validate((valid) => {
                if (valid) {
                    this.$axios.post('/api/users/login', this.loginUser)
                    .then(res => {
                        const { token } = res.data
                        localStorage.setItem('Token', token)

                        // 解析 token
                        const decoded = jwt_decode(token)

                        // token 解析到 vuex 中
                        this.$store.dispatch('setAuthorized', !this.isEmpty(decoded))
                        this.$store.dispatch('setUser', decoded)

                        this.$router.push('/index')
                    })
                }
            });
        },
        isEmpty(value) {
            return (
                value === undefined || 
                value === null ||
                (typeof value === 'object' && Object.keys(value).length === 0) ||
                (typeof value === 'string' && value.trim().length === 0)
            )
        }
    }
}
</script>

<style lang="less" scoped>
.login {
    position: relative;
    width: 100%;
    height: 100%;
    background: url(../assets/bg.jpg) no-repeat center center;
    background-size: 100% 100%;

    .form_container {
        width: 370px;
        height: 210px;
        position: absolute;
        top: 10%;
        left: 34%;
        padding: 25px;
        border: 5px;
        text-align: center;

        .title {
            font-family: 'Microsoft YaHei';
            font-weight: bold;
            font-size: 26px;
            color: #fff;
        }

        .loginForm {
            margin-top: 20px;
            background: #fff;
            padding: 20px 40px 20px 20px;
            border-radius: 5px;
            box-shadow: 0 5px 10px #cccc;

            .submit_btn {
                width: 100%;
            }

            .tiparea {
                text-align: right;
                font-size: 12px;
                color: #333;

                .a {
                    color: #409eff;
                }
            }
        }
    }
}
</style>